Telegram Group & Telegram Channel
🐍 Хитрая задача на Python для опытных разработчиков

🔹 Уровень: Advanced
🔹 Темы: изменяемые объекты, ссылки, list multiplication, side effects

📌 Условие

Что выведет следующий код?


matrix = [[0] * 3] * 3

matrix[0][0] = 1

for row in matrix:
print(row)


Вопросы

1. Почему изменяется весь первый столбец, а не только [0][0]?
2. Как работает [[0]*3]*3 и почему это опасно?
3. Как правильно создать независимую матрицу 3×3 из нулей?

🔍 Разбор

Ожидаемый (и удивительный!) вывод:

[1, 0, 0]
[1, 0, 0]
[1, 0, 0]


🔧 Почему так происходит

- Выражение [[0] * 3] * 3 создаёт три ссылки на один и тот же вложенный список.
- matrix[0][0] = 1 меняет все строки, потому что они указывают на один и тот же объект в памяти.

⚠️ Подвох

Это один из самых частых скрытых багов в Python, особенно при создании вложенных списков.

🧠 Решение

Нужно использовать генератор списка, чтобы создать три независимых объекта:


matrix = [[0] * 3 for _ in range(3)]


Теперь matrix[0][0] = 1 затронет только первую строку:


[1, 0, 0]
[0, 0, 0]
[0, 0, 0]


📌 Всегда проверяй, создаёшь ли ты уникальные объекты, особенно если работаешь с вложенными структурами.



tg-me.com/pro_python_code/1811
Create:
Last Update:

🐍 Хитрая задача на Python для опытных разработчиков

🔹 Уровень: Advanced
🔹 Темы: изменяемые объекты, ссылки, list multiplication, side effects

📌 Условие

Что выведет следующий код?


matrix = [[0] * 3] * 3

matrix[0][0] = 1

for row in matrix:
print(row)


Вопросы

1. Почему изменяется весь первый столбец, а не только [0][0]?
2. Как работает [[0]*3]*3 и почему это опасно?
3. Как правильно создать независимую матрицу 3×3 из нулей?

🔍 Разбор

Ожидаемый (и удивительный!) вывод:

[1, 0, 0]
[1, 0, 0]
[1, 0, 0]


🔧 Почему так происходит

- Выражение [[0] * 3] * 3 создаёт три ссылки на один и тот же вложенный список.
- matrix[0][0] = 1 меняет все строки, потому что они указывают на один и тот же объект в памяти.

⚠️ Подвох

Это один из самых частых скрытых багов в Python, особенно при создании вложенных списков.

🧠 Решение

Нужно использовать генератор списка, чтобы создать три независимых объекта:


matrix = [[0] * 3 for _ in range(3)]


Теперь matrix[0][0] = 1 затронет только первую строку:


[1, 0, 0]
[0, 0, 0]
[0, 0, 0]


📌 Всегда проверяй, создаёшь ли ты уникальные объекты, особенно если работаешь с вложенными структурами.

BY Python RU


Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283

Share with your friend now:
tg-me.com/pro_python_code/1811

View MORE
Open in Telegram


Python RU Telegram | DID YOU KNOW?

Date: |

Should I buy bitcoin?

“To the extent it is used I fear it’s often for illicit finance. It’s an extremely inefficient way of conducting transactions, and the amount of energy that’s consumed in processing those transactions is staggering,” the former Fed chairwoman said. Yellen’s comments have been cited as a reason for bitcoin’s recent losses. However, Yellen’s assessment of bitcoin as a inefficient medium of exchange is an important point and one that has already been raised in the past by bitcoin bulls. Using a volatile asset in exchange for goods and services makes little sense if the asset can tumble 10% in a day, or surge 80% over the course of a two months as bitcoin has done in 2021, critics argue. To put a finer point on it, over the past 12 months bitcoin has registered 8 corrections, defined as a decline from a recent peak of at least 10% but not more than 20%, and two bear markets, which are defined as falls of 20% or more, according to Dow Jones Market Data.

Python RU from it


Telegram Python RU
FROM USA